package utils

import (
	"encoding/json"
	"io/ioutil"
	"zinx/src/ziface"
)

/*储存一些有关Zinx框架的全局参数，供其他模块使用，
其他一些参数也可以通过用户根据zinx.json来配置*/

type GlobalObj struct {
	TcpServer        ziface.IServer //当前zinx的全局server对象
	Host             string
	TcpPort          int
	Name             string
	Version          string //当前zinx版本号
	MaxPacketSize    uint32 //需要数据包的最大值?
	MaxConn          int    //当前服务器主机允许的最大连接个数
	WorkerPoolSize   uint32
	MaxWorkerTaskLen uint32
	MaxMsgChanLen    uint32
	//配置文件路径
	ConfFilePath string
}

// GlobalObject 一个全局的对象
var GlobalObject *GlobalObj

//我们在全局定义了一个GlobalObject对象，目的就是让其他模块都能访问到里面的参数。

// Reload 读取用户的配置文件的方法
func (g *GlobalObj) Reload() {
	//data, err := ioutil.ReadFile("C:/Users/mechrevo/GolandProjects/zinx/src/conf/zinx.json")
	data, err := ioutil.ReadFile(GlobalObject.ConfFilePath)
	//当前目录是哪个？
	if err != nil {
		panic(err)
	}
	//将json数据解析到struct中
	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		panic(err)
	}
}

//init()方法，目的是初始化GlobalObject对象
//，和加载服务端应用配置文件conf/zinx.json
func init() {
	//初始化并给一些默认值
	GlobalObject = &GlobalObj{
		Name:             "ZinxServerApp",
		Version:          "V0.4",
		TcpPort:          7777,
		Host:             "0.0.0.0",
		MaxConn:          12000,
		MaxPacketSize:    4096,
		ConfFilePath:     "C:/Users/mechrevo/GolandProjects/zinx/src/conf/zinx.json",
		WorkerPoolSize:   10,
		MaxWorkerTaskLen: 1024,
		MaxMsgChanLen:    5,
	}

	//从配置文件中加载一些用户配置的参数
	GlobalObject.Reload()

}
